package day04.FanXing;

import Teacher_Test.TestIO.Animal;
import fuxi01_lombok_override_array_20250707.Cat;
import fuxi01_lombok_override_array_20250707.Dog;

import java.util.ArrayList;
import java.util.List;

public class Demo_fanxing_super_extens {

    /**
     * List<? extends Animal>此处的list形参集合中的元素对象
     * 只能传递Animal以及Animal子类的集合元素，
     * 向下传递，设置上限
     *
     * @param list
     */
    public void hello(List<? extends Animal> list) {
        System.out.println(list);
    }

    /**
     * List<? super Dog>此处的list形参集合中的元素对象
     * 只能传递Dog以及Dog类的父类集合元素，
     * 向上传递，设置下限
     *
     * @param list
     */
    public void world(List<? super Dog> list) {

    }


    public static void main(String[] args) {
        List<Animal> list = new ArrayList<>();
        List<Dog> list1 = new ArrayList<>();
        List<Cat> list2 = new ArrayList<>();
        //由于String不是Animal本身,也不是Animal的子类,因此无法将list3传递给hello()方法
        List<String> list3 = new ArrayList<>();

        Demo_fanxing_super_extens f = new Demo_fanxing_super_extens();
/*        因为 hello方法的 泛型是 animal，并且list1,list2,;list3的泛型是Dog和Cat和String
            List<Dog> list1 = new ArrayList<>();
            List<Cat> list2 = new ArrayList<>();
            所以list1,list2,list3都不能使用hello来传递参数
            泛型不一致
        */
        f.hello(list);
//        f.hello(list1);
//        f.hello(list2);
//        f.hello(list3);

        List<Dog> list4 = new ArrayList<>();
        List<Object> list5 = new ArrayList<>();

/*         world方法的泛型是 Dog，方式是super，向上传递，
          并且List<Animal> list = new ArrayList<>();
          所以list的泛型是Animal 不符合 要求
        */
//        f.world(list);
        f.world(list1);
        f.world(list4);
        f.world(list5);

    }
}
